/**
 * vue2.7 导出的内容，与vue3.0 有一定的区别
 */
import { getCurrentInstance } from 'vue'
import { Vue } from 'vue/types/vue'

// 在ts中，需要为getCurrentInstance的返回值进行类型断言，因为该方法返回值的类型定义为 { proxy: Vue } | null，使用vue上的方法会报错。
export function useCurrentInstance() {
  const root = getCurrentInstance() as { proxy: Vue }
  return root.proxy
}
// 访问vuex
export const useStore = () => {
  const vm = getCurrentInstance()

  if (!vm) throw new Error('must be called in setup')
  return vm.proxy.$store
}
// 访问router
export const useRouter = () => {
  const vm = getCurrentInstance()
  if (!vm) throw new Error('must be called in setup')
  return vm.proxy.$router
}
// 访问route
export const useRoute = (): any => {
  const vm = getCurrentInstance()
  if (!vm) throw new Error('must be called in setup')
  return vm.proxy.$route
}
